package br.com.sgi.bean;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.stereotype.Controller;

import br.com.sgi.autentication.UsuarioLogado;
import br.com.sgi.model.Funcao;
import br.com.sgi.model.Igreja;
import br.com.sgi.model.Users;
import br.com.sgi.service.FuncaoService;
import br.com.sgi.service.IgrejaService;
import br.com.sgi.service.SistemaService;
import br.com.sgi.util.Mensagem;

@Controller("funcaoCadastroBean")
@Scope("request")
public class FuncaoCadastroBean extends BaseView {

	@Autowired
	private FuncaoService funcaoService;
	
	@Autowired
	private SistemaService sistemaService;
	@Autowired
	private IgrejaService igrejaService;
	
	private Funcao funcao;
	private Funcao funcaoPesquisa;
	private List<Igreja> listaIgreja;
	
	
	private Long coFuncao;
	
	private List<Funcao> listaFuncao;
	
	private final String NOME_TELA = "FUNÇÃO";
	
	
	/**
	 * Cadastro ou atualizacao de uma Funcao
	 */
	public void salvar(){
		Users users = UsuarioLogado.getUsuarioLogado();
		if(funcao != null && users != null){
			if(funcao.getCoSeqFuncao() == null){
				
				funcaoService.salvar(funcao);
				Mensagem.infoMsg("sucesso.MGS_02");
				super.statusBotoesPesquisa();
				funcao = new Funcao();
			}else{
				funcaoService.atualizar(funcao);
				
				Mensagem.infoMsg("sucesso.MGS_03");
				super.statusBotoesPesquisa();
				
			}
			limpar();
			pesquisar();
			
		}
	}
	
	
	private void limpar(){
		funcao =  new Funcao();
		funcaoPesquisa = new Funcao();
		listaFuncao =  new ArrayList<Funcao>();
	}
	
	/**
	 * voltar a tela de pesquisa
	 */
	public void voltar(){
		statusBotoesPesquisa();
	}
	
	/**
	 * realiza a exclucao de uma funcao
	 */
	public void excluir(){
			try {
				funcaoService.excluir(funcao.getCoSeqFuncao());
				pesquisar();
				Mensagem.infoMsg("sucesso.MSG_01");
				statusBotoesPesquisa();
			} catch (DataIntegrityViolationException e) {
				Mensagem.addWarn("erro.MSG_05");
			}
			
			
		
	}
	
	public void editar(){
		statusEditar();
		
	}
	
	/**
	 * Inicia tela para um novo cadastro
	 * @return
	 */
	public void novo(){
		statusBotoesCadastro();
		funcao = new Funcao();
	}
	
	/**
	 * pesquisa funcoes
	 */
	public void pesquisar(){
		listaFuncao = funcaoService.buscarFuncaoPorFiltros(funcaoPesquisa.getNoFuncao());
		if(listaFuncao.isEmpty())
			super.registroNaoEncontrado = true;
	}
	
	public Funcao getFuncao() {
		if(funcao == null)
			funcao = new Funcao();
		return funcao;
	}

	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}

	public Funcao getFuncaoPesquisa() {
		if(funcaoPesquisa == null)
			funcaoPesquisa = new Funcao();
		return funcaoPesquisa;
	}
	

	public void setFuncaoPesquisa(Funcao funcaoPesquisa) {
		this.funcaoPesquisa = funcaoPesquisa;
	}

	public List<Funcao> getListaFuncao() {
		if(listaFuncao == null)
			listaFuncao = new ArrayList<Funcao>();
		return listaFuncao;
	}

	public void setListaFuncao(List<Funcao> listaFuncao) {
		this.listaFuncao = listaFuncao;
	}

	public Long getCoFuncao() {
		return coFuncao;
	}

	public void setCoFuncao(Long coFuncao) {
		this.coFuncao = coFuncao;
	}
	
	public List<Igreja> getListaIgreja() {
		if(listaIgreja == null)
			listaIgreja = igrejaService.buscarIgrejasPorUsers();
		return listaIgreja;
	}
	
}
